package com.cskaoyan.javase.oop2._1extends._7initialization._2basic;
/**
 * 注意事项:
 *      1.子类对象的初始化过程中,不管什么初始化,都需要调用父类的构造器
 *          但是父类的构造器虽然执行,但是不会创建父类对象
 *          构造器不是用来创建对象的,是用来赋值的
 *          构造器现在就有了两个用途:
 *              1.创建自身对象时给成员变量赋值
 *              2.创建子类对象时,给自身父类成员变量赋值
 *
 *       2.this和super在表示调用构造器时,它们都必须在构造器代码的第一行
 *       这说明它们在表示调用构造器时,是不能混用的
 *       为什么它们都必须在第一行呢?
 *       因为如果第一行没有this或者super调用构造器,那就隐含super();表示调用父类的无参
 *       如果允许它们不在第一行
 *       就会导致父类构造器多次 重复被调用
 *
 *
 *
 * @since 17:10
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo2 {
}
class Animal{
    int age;
    String name;
    String breed;

    public Animal(int age, String name, String breed) {
        this.age = age;
        this.name = name;
        this.breed = breed;
    }

    public Animal(String name, String breed) {
        this.name = name;
        this.breed = breed;
    }

    public Animal() {
    }
}
class Cat extends Animal{
    double price;
    // 当存在继承的父子类后,自动生成子类构造器的快捷键的使用就会发生变化,会要求先选择父类的构造器


    public Cat(int age, String name, String breed, double price) {
        super(age, name, breed);
        this.price = price;
    }

    public Cat(double price) {
        // 隐含super();
        this.price = price;
    }

    public Cat() {
        // 隐含super();
    }
}